﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TcpClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            cl.ServerIP = txbIP.Text.Trim();
            cl.ServerPort = Convert.ToInt32(txbPort.Text.Trim());
            if (cl.Connect())
            {
                txbIP.Enabled = false;
                txbPort.Enabled = false;
                btnConnect.Enabled = false;
                btnDisconnect.Enabled = true;
                AddLog("Подключение клиента к серверу" + cl.EndPoint);
            }
            else AddLog("Не удалось подключиться к серверу" + cl.EndPoint);
            btnUpdateLogCl_Click(null, null);
        }

        private void btnDisconnect_Click(object sender, EventArgs e)
        {
            cl.Disconnect();
            txbIP.Enabled = true;
            txbPort.Enabled = true;
            btnConnect.Enabled = true;
            btnDisconnect.Enabled = false;
            AddLog("Отключение клиента от сервера");
            btnUpdateLogCl_Click(null, null);
        }

        private void btnTest_Click(object sender, EventArgs e)
        {
            cl.Send(new byte[100]); AddLog("Отправлено серверу 100 байт");
            cl.Send(new byte[20]); AddLog("Отправлено серверу 20 байт");
            cl.Send(new byte[230]); AddLog("Отправлено серверу 230 байт");
            cl.Send(new byte[30]); AddLog("Отправлено серверу 30 байт");
            btnUpdateLogCl_Click(null, null);
        }

        void AddLog(string Mess)
        {
            txbLog.AppendText(string.Format("[{0}] {1}\r\n", DateTime.Now.ToString("dd.MM.yy HH:mm:ss,fff"), Mess));
        }

        private void btnUpdateLogCl_Click(object sender, EventArgs e)
        {
            string[] log = cl.GetLog();
            StringBuilder sb = new StringBuilder();
            foreach (string s in log) sb.AppendLine(s);
            txbLogCl.Text = sb.ToString();
            txbLogCl.Select(txbLogCl.Text.Length, 0);
            txbLogCl.ScrollToCaret();
        }

        private void cl_Recive(object Sender, ESpace.ETcpClient.RecvEventArgs e)
        {
            AddLog(string.Format("Принято от сервера {0} байт", e.buf.Length));
            btnUpdateLogCl_Click(null, null);
        }

        private void cl_DisconnectFromServer(object Sender)
        {
            AddLog("Отключение от сервера");
            btnUpdateLogCl_Click(null, null);
        }
    }
}
